<?php  namespace Admin\Controller;

class GoodsController extends  CommonController{
	
//	定义私有属性 用于接收实例化模型后产生的对象
	//分类对象
	private $cateModel;
	//品牌对象
	private $brandModel;
	//商品对象
	private $goodsModel;
	//商品详情对象
	private $goodsDetailModel;
	//商品属性对象
	private $goodsAttrModel;
	//类型属性对象
	private $typeAttrModel;
	//货品列表对象
	private $goodsListModel;
	public function __construct(){
		parent::__construct();
		//实例化分类模型
		$this->cateModel = new \Common\Model\Cate;
		//实例化品牌模型
		$this->brandModel = new \Common\Model\Brand;
		//实例化商品模型
		$this->goodsModel = new \Common\Model\Goods;
		//实例化商品详情模型
		$this->goodsDetailModel = new \Common\Model\GoodsDetail;
		//实例化商品属性模型
		$this->goodsAttrModel = new \Common\Model\GoodsAttr;
		//实例化类型属性模型
		$this->typeAttrModel =new \Common\Model\Attri;
		//实例化货品列表模型
		$this->goodsListModel = new \Common\Model\Goodslist;
	}
	
	//添加商品模型
	public function addGoods(){
//		判断是否提交表单
		if(IS_POST){
//			调用添加数据方法 弹出提示消息
			if($this->goodsModel->addData())View::success('添加成功',U('index'));
			//没通过自动验证的话 提示具体错误消息
			View::error($this->goodsModel->getError());
		}
		//获得分类数据
		$cateData = $this->cateModel->get();
		//树状排列数据
		$cateData = Data::tree($cateData,'cname','cid','pid');
		//分配分类数据到页面上
		View::with('cateData',$cateData);
		//获得品牌数据
		$brandData = $this->brandModel->get();
		//分配品牌数据到页面上
		View::with('brandData',$brandData);
		View::make();
	}
	
	public function editGoods(){
		if(IS_POST){
			if($this->goodsModel->editData())View::success('编辑成功',U('index'));
			View::error($this->goodsModel->getError());
		}
		//获得要编辑的商品ID
		$gid = Q('get.gid',0,'intval');
		//获得要编辑的商品所属的类型的ID
		$tid = Q('get.tid',0,'intval');
		//获得商品的属性数据
		$oldgaData = $this->goodsAttrModel->where("goods_gid={$gid}")->get();
		//分配到页面上
		View::with('oldData',$oldgaData);
		//定义数组 用于编辑商品页面上显示商品之前所选的商品属性
		$gaDataCheck = array();
		//遍历商品的属性数据 把商品属性值压进$gaDataCheck
		foreach ($oldgaData as $k => $v) {
			$gaDataCheck [] = $v['gavalue'];
		}
		//分配数组到页面上
		View::with('gadataCheck',$gaDataCheck);
		//获得要编辑的商品所属的类型拥有的属性数据 用于在页面上显示 $tid为GET到的tid
		$typeAttrData = $this->typeAttrModel->where("type_tid={$tid}")->get();
		//定义数组 重组数组 把类型属性值字段的内容转为数组
		$taData = array();
		foreach ($typeAttrData as $k => $v) {
			//字符串转数组
			$tavalue = explode('|', $v['tavalue']);
			$taData []= array(
				'taid'=>$v['taid'],
				'taname'=>$v['taname'],
				'tavalue'=>$tavalue,
				'atype'=>$v['atype'],
				'type_tid'=>$v['type_tid']
			);
		}
		//分配数据到页面上
		View::with('taData',$taData);
		//商品表旧数据 用于在页面上显示该上商品原有的数据
		$goodsData = $this->goodsModel->where("gid={$gid}")->find();
		//分配数据到页面上
		View::with('goodsData',$goodsData);
		//这里判断用户在添加商品的时候是提交了一张还是多张列表图
//		if(strpos($goodsData['listpic'], '|')){
//			//如果提交了多张列表图 则listpic字段有 | 分隔符  把字符串转数组
//			$listpicData = explode('|', $goodsData['listpic']);
//		} else {
//			//如果只提交了一张列表图 直接组成数组
//			$listpicData = array('pics'=>$goodsData['listpic']);
//		}
		//把列表图字段内容转为数组  在编辑页面上遍历
		$listpicData = explode('|', $goodsData['listpic']);
		//分配数据到页面上  用于在页面上显示列表图
		View::with('listpicData',$listpicData);
//		//这里判断用户在添加商品的时候是提交了一张还是多张列表图
//		if(strpos($goodsData['indexpic'], '|')){
//			//如果提交了多张列表图 则listpic字段有 | 分隔符  把字符串转数组
//			$indexpicData = explode('|', $goodsData['indexpic']);
//		} else {
//			//如果只提交了一张列表图 直接组成数组
//			$indexpicData = array('pics'=>$goodsData['indexpic']);
//		}
		//把主页图字段内容转为数组  在编辑页面上遍历
		$indexpicData = explode('|', $goodsData['indexpic']);
		//分配数据到页面上  用于在页面上显示列表图
		View::with('indexpicData',$indexpicData);
		//分类数据
		$cateData = $this->cateModel->get();
		//把分类数据按树状排列 显示出父子关系
		$cateData = Data::tree($cateData,'cname','cid','pid');
		//分配分类数据到页面上
		View::with('cateData',$cateData);
		//品牌数据
		$brandData = $this->brandModel->get();
		//分配品牌数据到页面上
		View::with('brandData',$brandData);
		//商品详细数据
		$gdData = $this->goodsDetailModel->where("goods_gid={$gid}")->find();
		//分配数据到页面上
		View::with('gdData',$gdData);
		//在编辑页面要遍历数组 把上传的图片遍历显示出来
		//这里判断用户提交商品的时候提交了一张或多张相片
		//如果提交了多张 把字符串转数组
//		if(strpos($gdData['album'], '|')){
//			$albumData = explode('|', $gdData['album']);
//			//如果只提交了一张相片 直接组成数组
//		}else{
//			$albumData = array('album'=>$gdData['album']);
//		}
		$albumData = explode('|', $gdData['album']);
		View::with('albumData',$albumData);
		View::make();
	}
	
	
	public function displayTypeAttr(){
		//接收ajax提交过来的tid
		$tid = $_POST['tid'];
		//实例化类型属性模型
		$typeAttrModel = new \Common\Model\Attri;
		//查询对应的type_tid的类型属性
		$typeAttrData = $typeAttrModel->where("type_tid={$tid}")->get();
		//返回json数据
		echo json_encode($typeAttrData);
	}
	
	//uploadify异步上传
	public function upload()
	{
	    $file = Upload::path('Upload/Content/' . date('y/m'))->make();
	    if (empty($file)) {
	        // 相当于：echo json_encode(Upload::getError());exit;
	        $this->ajax(Upload::getError());
	    } else {
	        /** $file内部就是以下这个数组
	            $file = array(
	                0 => array(
		                'path' => 'Upload/Content/15/8/123981239172.jpg'    ,
		                'url' => 'http://localhost/cms_edu/Upload/Content/15/8/123981239172.jpg',
		                'image' => 1
	            ),
	        );**/
	        //上传成功，把上传好的信息返给js 也就是uploadify
	        $data = $file[0];
	        // 相当于：echo json_encode($data);exit;
	        $this->ajax($data);
	    }
	}
	
	public function delGoods(){
		//获得要删除的商品ID
		$gid = Q('get.gid',0,'intval');
		//删除商品表对应该商品ID的数据
		$this->goodsModel->where("gid={$gid}")->delete();
		//删除商品详细表对应该商品ID的数据
		$this->goodsDetailModel->where("goods_gid={$gid}")->delete();
		//删除商品属性对应该商品ID的数据
		$this->goodsAttrModel->where("goods_gid={$gid}")->delete();
		//删除货品列表对应该商品ID的数据
		$this->goodsListModel->where("goods_gid={$gid}")->delete();
		View::success("删除成功",U('index'));
	}
	
	public function goodslist(){
		//取得要添加货品的商品gid
		$gid = Q('get.gid',0,'intval');
		//取得对应的商品ID的货品数据
		$glData = $this->goodsListModel->where("goods_gid={$gid}")->get();
		foreach ($glData as $k => $v) {
			foreach (explode(',', $v['combine']) as $key => $value) {
				$glData[$k]['gavalue'][] = Db::table('goods_attr')->where("gaid={$value}")->pluck('gavalue');
			}
		}
		View::with('glData',$glData);
		//判断是否提交表单
		if(IS_POST){
			if($this->goodsListModel->addData())View::success('添加成功');
			View::error($this->goodsListModel->getError());
		}
		//获得商品的规格值 商品属性表关联类型属性表 where条件为atype=1 AND goods_gid={$gid} atype=1代表为规格的数据  
		$data = Db::table('goods_attr')
		->join('type_attribute','type_attribute_taid','=','taid')
		->where("atype=1 AND goods_gid={$gid}")
		->groupBy('taid')
		->get();
		//遍历数组 在数据里压商品已选的规格数据
		foreach ($data as $k => $v) {
			$data[$k]['son'] = 	Db::table('goods_attr')
								->where("goods_gid={$gid} AND type_attribute_taid={$v['taid']}")
								->get();
		}
		//分配数据
		View::with('data',$data);
		View::make();
	}
	
	//编辑货品列表
	public function editgoodslist(){
		//获得要编辑的货品的glid
		$glid = Q('get.glid',0,'intval');
		//获得要商品的gid(货品属于商品)
		$gid = Q('get.gid',0,'intval');
		//是否提交表单判断
		if(IS_POST){
			if($this->goodsListModel->editData())View::success('修改成功',U('goodslist',array('gid'=>$gid)));
			View::error($this->goodsListModel->getError());
			
		}
		//获得要编辑的货品的旧数据 用于显示在页面上 并转为一维数组
		$oldData = $this->goodsListModel->where("glid={$glid}")->find();
		//分配数据
		View::with('oldData',$oldData);
		//定义检查数组 用于编辑货品页面上的option的selected默认选中
		$checkData = explode(',', $oldData['combine']);
		//分配数据
		View::with('checkData',$checkData);
		//获得商品属性所属于的类型属性表里的规格值
		$data = Db::table('goods_attr')
				->join('type_attribute','type_attribute_taid','=','taid')
				->where("goods_gid={$gid} AND atype =1")
				->groupBy('taid')
				->get();
		//遍历数组 在数据里压商品已选的规格数据
		foreach ($data as $k => $v) {
			$data[$k]['son'] = 	Db::table('goods_attr')
								->where("goods_gid={$gid} AND type_attribute_taid={$v['taid']}")
								->get();
		}
		//分配数据
		View::with('data',$data);
		View::make();
	}
	//删除货品列表方法
	public function delgoodslist(){
		//获得要删除的货品列表id
		$glid = Q('get.glid',0,'intval');
		//获得要删除的货品属于哪个商品 取得商品ID
		$gid = Q('get.gid',0,'intval');
		//操作模型 删除数据
		$this->goodsListModel->where("glid={$glid}")->delete();
		//更新商品总库存
		$this->goodsListModel->sumTotalSum($gid);
		View::success('删除成功');
	}
	
	//添加货品时  检查货品组合是否已存在
	public function checkgl(){
		//把ajax提交过来的数组转为字符串
		$combine = implode(',', $_POST['combine']);
		//查询货品列表是否存在这样的组合
		$value = $this->goodsListModel->where("combine='{$combine}'")->count();
		//如果有返回 1 ajax做判断
		if($value ==1){
			echo 1;
		//如果没有 返回0
		} else {
			echo 0;
		}

	}
	public function index(){
		$goodsnum = $this->goodsModel->count();
		$page = Page::row(4)->make($goodsnum);
		View::with('page',$page);
		//获得商品表数据 在页面上遍历显示
		$goodsData = $this->goodsModel->orderBy('carriage_time','desc')->limit(Page::limit())->get();
		View::with('data',$goodsData);
		View::make();	
	}
} 


 ?>